Arduino - LCD 1602

Projeto 05 - LCD 1602

Se tem um periférico que é uma mão na roda para o Arduino é o display 1602. Ele permite escrever mensagens de texto na tela de LCD informando o usuário sobre o que desejarmos.

Muitas vezes nos nossos projetos utilizamos leds e buzzers e é o suficiente para dar o recado. Mas o arduino , às vezes, faz uma tarefa que a comunicação com o usuário é fundamental ou que é muito complexa e fica impossível saber em que etapa ele está do processo sem uma mensagem.

Citando um exemplo, meu módulo de carga de bateria do meu carro. Meu carro fica muito tempo na garagem e eu uso pouco...resultado a bateria estava quase sempre descarregada e quando eu ia usar o carro, abraço, não dava. Resolvi então fazer um 'flutuador' para a bateria, ou seja, ele não 'carrega' uma bateria descarregada mas sim 'mantém' uma bateria carregada. E fiz esse carregador com arduino e ele é muito inteligente...informa a tensão da bateria, se esta carregando ou não...a quanto tempo (em segundos). Sendo assim sempre que vou pegar o carro antes de desligar ele vejo o display que me informa que a bateria esta ok e eu saio numa boa. Nunca mais tive problemas.

O Módulo LCD 1602 se chama 1602 porque possui 16 caracteres por linha e possui 2 linhas.
Portanto, você pode escrever uma mensagem de até 32 caracteres nele. Contudo, se você continuar escrevendo mais do que cabe ele pode deslocar como se fosse um carrosel de caracteres jogando os mais antigos fora.

Em matéria de consumo de energia o módulo 1602 é um problema. Existe 2 tipos de LCD 1602, um com luz de fundo e outro sem luz de fundo.

Sem luz de fundo o LCD1602 consome 6 mA. Super economico mas ninguém enxerga nada num LCD com o fundo desligado a não ser que tenha uma fonte de luz incindindo nele.

Já o LCD com luz de fundo consome 26 mA e a iluminação é boa dando para ler seu conteúdo praticamente em qualquer condição desfavorável de luz.

Quanto aos modelos de LCD 1602 temos dezenas...tem com diversas cores do display : Verde, Azul...que exibe os caracteres em preto. Dependendo de nossa montagem podemos escolher um bem estiloso para colocar num painel de um carro, por exemplo, na cor azul escuro com letras em branco (excelente contraste e visibilidade).

O LCD 1602 se comunica com o mundo externo de 3 maneiras :
• 1-Comunicação paralela com 8 bits.
• 2-Comunicação paralela com 4 bits.
• 3-Comunicação serial I2C.

• 1-Comunicação paralela com 8 bits. Nunca usei e nunca ví ninguém usar. Ninguém vai gastar 8 pinos dos 14 que o Arduino tem para conversar com o LCD se ele pode fazer exatamente isso com 4 bits.

• 2-Comunicação paralela com 4 bits. Este é o modo mais simples e pratico de usar o LCD1602. Digo isto porque o I2C você tem que comprar um placa extra que, se bobear, sai mais caro que o LCD e você economiza 3 pinos com isso, nem sempre é vantajoso.
Sendo assim, gastamos 4 bits para comunicação com o LCD1602 mais 2 para controle. Veja imagem abaixo :

No pino 3 do LCD temos o pino VO. Ele define o contraste...se ficar com muito contraste até o fundo do caractere fica branco e se ficar com pouco contraste você não enxerga nada. Muitos LCDs a gente liga direto no terra e fica bom, em outros fica com muito contraste. Com esse trimpot você ajusta como mais gostar.

Os pinos 15 (A) e 16 (K) do LCD são o Anodo(+) e Katodo(-) da luz de fundo do lcd. Ás vezes eu coloco uma chave para ligar ou não a luz de fundo mas normalmente fica ligada direto.


Esquema :


Programa :

/*
Projeto 5 : Como exibir uma mensagem no display de LCD

Conexão do Arduino e o modo de LCD
    LCD        Arduino
    RS            D7
    Enable        D6
    D4            D5
    D5             D4
    D6            D3
    D7            D2
    R/W         GND-Terra
    VSS        GND-Terra
    VCC        Fonte +5V - Pode ser a do arduino
    
Nota : No pino 3 do LCD(VO) temos um trimpot de 10K
    Uma extremidade ligada a terra
    Outra extremidade ligada a 5V(VCC)
    O pino central ligado ao Pino 3 do LCD - VO
  
*/

#include <LiquidCrystal.h>    //biblioteca do display de LCD    

 LiquidCrystal lcd(7, 6, 5, 4, 3, 2);    // RS, E, D4,D5,D6,D7

void setup() {
   lcd.begin(16, 2);                                //setando o modo que o LCD opera -16 linhas, 2 colunas
   lcd.print("Tenha um bom dia...!");    //exibe esta mensagem na linha 0 coluna 0
}

void loop() {
   lcd.setCursor(0, 1);                //Colocando o cursor na coluna 0 linha 1
   lcd.print(millis() / 1000);        // exibindo quantos segundos o arduino esta ligado
}


Funcionamento :

A primeira linha de programa contém a biblioteca para acesso ao LCD.
#include //biblioteca do display de LCD

Caso você nunca tenha instalado uma biblioteca eu recomendo o seguinte :
• 1 - Vá no menu 'Ferramentas' e selecione o item 'Gerenciar bibliotecas'.
Serão exibidas todas as bibliotecas que estão disponíveis para download e as que já estiver instaladas na sua máquina terá uma mensagem 'installed' indicando que já esta instalada.
• 2 - No topo direito da tela tem uma caixa em branco...digite lcd nela e em seguida enter.
• 3 - Será exibido um monte de bibliotecas de LCD. Existe um monte de LCD de todos os tipos e tamanhos inclusive com tela grande, por toque.
Escolha LiquidCrystal que foi a que usamos passando o mouse sobre a janela que ele foi exibido e clicando em 'install' (instalar).

Importante : Essas bibliotecas estão sempre sendo atualizadas e melhoradas. Recomendo atualizar sempre que for possível mas se você tem um projeto em produção aconselho a salvar a versão antiga antes de fazer esta operação. Assim se der erro no seu projeto tem como você voltar a versão antiga.

Na função setup tem a linha : lcd.begin(16, 2); //setando o modo que o LCD opera -16 linhas, 2 colunas.
Que indica qual é o padrão do nosso LCD - 1602 - 16 Colunas por 2 linhas.
Esta linha envia a ordem para a biblioteca que envia para o LCD.
No final desta instrução temos o LCD limpo, o cursor no primeiro caractere da primeira linha pronto para trabalhar.

Como eu quiz exibir uma mensagem estática (fixa) eu coloquei na função setup mesmo :
lcd.print("Tenha um bom dia...!"); //exibe esta mensagem na linha 0 coluna 0.
Então na primeira linha do LCD é exibida a mensagem : Tenha um bom dia...!.
Importante : Acostume a contar caracteres. No LCD a coisa fica muito zuada se mensagens não couberem na tela do LCD ou se mensagens forem escritas uma sobre as outras.

A linha : lcd.setCursor(0, 1); //Colocando o cursor na coluna 0 linha 1.
Como diz no comentário coloca o cursor do LCD no primeiro caractere da segunda linha.
Nessa posição será escrito o tempo transcorrido em segundos desde que ligamos o arduino.
Nota : A contagem vai de zero a infinito mas não tem separação de minutos, horas, dias, etc.